const mysql = require('mysql2/promise'); // 改用 promise 版本，确保 await 正常工作
const bcrypt = require('bcrypt');

// 数据库配置（替换为你的实际配置）
const dbConfig = {
    host: '127.0.0.1',
    user: 'root',
    password: 'admin123',
    database: 'study_partner_db'
};

// 批量加密密码的函数
async function batchEncryptPasswords() {
  let connection;
  try {
    // 1. 连接数据库（使用 promise 版本的 createConnection）
    connection = await mysql.createConnection(dbConfig);
    console.log('数据库连接成功');

    // 2. 查询所有明文密码（排除已加密的bcrypt密码，其以 $2a$、$2b$、$2y$ 开头）
    const [users] = await connection.execute(
      "SELECT id, password FROM users WHERE password NOT REGEXP '^\\$2[aby]\\$'"
      // 正则说明：匹配以 $2a$、$2b$、$2y$ 开头的字符串（bcrypt加密特征）
    );

    if (users.length === 0) {
      console.log('没有需要加密的明文密码（已全部加密或无数据）');
      return;
    }

    console.log(`共发现 ${users.length} 条需要加密的密码，开始处理...`);

    // 3. 循环加密并更新密码
    for (const user of users) {
      try {
        // 加密密码（使用同步方法 hashSync，盐值强度 10）
        const hashedPassword = bcrypt.hashSync(user.password, 10);

        // 更新回数据库
        await connection.execute(
          'UPDATE users SET password = ? WHERE id = ?',
          [hashedPassword, user.id]
        );

        console.log(`✅ 成功更新用户 id=${user.id} 的密码`);
      } catch (err) {
        console.error(`❌ 处理用户 id=${user.id} 失败：`, err.message);
      }
    }

    console.log('\n🎉 所有明文密码已批量加密完成');

  } catch (err) {
    console.error('数据库操作失败：', err.message);
  } finally {
    // 4. 关闭连接
    if (connection) {
      await connection.end();
      console.log('数据库连接已关闭');
    }
  }
}

// 执行脚本
batchEncryptPasswords();